#ifndef IPLACE_H
#define IPLACE_H

#include "iidentifiable.h"

#include <QtCore/QSet>

namespace net
{
class ITransition;
class IMultiset;
class IColorSet;
}

namespace net
{

class IPlace : public IIdentifiable
{
public:
    IPlace() : IIdentifiable() {}

    virtual QString name() const = 0;

    virtual const IColorSet* getColorSet() const = 0;

    virtual const IMultiset* getTokens() const = 0;
    virtual void putTokens(IMultiset* tokens) = 0;
    virtual void withdrawTokens(IMultiset* tokens) = 0;

    virtual QSet<const ITransition* > getInputTransitions() const = 0;
    virtual QSet<const ITransition* > getOutputTransitions() const = 0;

protected:
    virtual ~IPlace() {}
};

} // namespace net
#endif
